
package Modelo;
import java.util.*;

public class Data {

	//atributos
	private int dia;
	private int mes;
	private int ano;

    public Data(String data) {
        altData(data);
    }

    public Data(int dia, int mes, int ano) {
        setDia(dia);
        setMes(mes);
        setAno(ano);
    }

    public Data() {
    }


	//metodos set e get
	public int getDia() {
		return dia;
	}
	public void setDia(int dia) {
		this.dia = verificaDia(dia);
	}
	public int getMes() {
		return mes;
	}
	public void setMes(int mes) {
		this.mes = verificaMes(mes);
	}
	public int getAno() {
		return ano;
	}
	public void setAno(int ano) {
		this.ano = verificaAno(ano);
	}
	//metodo para pegar horario do sistema
	public void modificData(){
		GregorianCalendar DATE = new GregorianCalendar();
		dia = DATE.get(Calendar.DATE);
		mes = DATE.get(Calendar.MONTH)+1;
		ano = DATE.get(Calendar.YEAR);
	}
	//metodo verificacao de ano
	private int verificaAno(int ano){
		GregorianCalendar DATE = new GregorianCalendar();
		if(ano>=(DATE.get(Calendar.YEAR)-80))
			return this.ano = ano;
		else
			return DATE.get(Calendar.YEAR);
	}
	//metodo para verificacao de mes
	private int verificaMes(int mes){
            GregorianCalendar DATE = new GregorianCalendar();
		if((mes>0)&&(mes<=12))
			return this.mes = mes;
		return  DATE.get(Calendar.MONTH)+1;
	}
	//metodo para verificacao de dia

	private int verificaDia(int dia){
            	GregorianCalendar DATE = new GregorianCalendar();
		if(((mes==4)||(mes==6)||(mes==9)||(mes==11))&&((dia>0)&&(dia<=30)))
			return this.dia = dia;
		else if(((mes==1)||(mes==3)||(mes==5)||(mes==7)||(mes==8)||(mes==10)||(mes==12))&&((dia>0)&&(dia<=31)))
			return this.dia = dia;
		else if(((ano%4==0)&&(ano%100!=0)||(ano%400==0))&&(mes==2)&&((dia>0)&&(dia<=29)))
			return this.dia = dia;
		else if((mes==2)&&((dia>0)&&(dia<29)))
			return this.dia = dia;
		return DATE.get(Calendar.DATE);
	}
	//formata data retorna uma string com a data formatada
	public String Formata_Data(){
		return String.format("%02d/%02d/%04d",dia,mes,ano);
	}

        //retorna uma string no formato aceito pelo banco de dados
        public String formatoBanco(){
            return ano+"/"+mes+"/"+dia;
        }

    //metodo para transformar a data em inteiro dd/mm/yyyy
    public  void altData(String mudar){
        char[] date = mudar.toCharArray();
        int []data = new int[3];
        int j=0;
        String atual="";
        for(int i=0;i<=date.length;i++){
            if(i<date.length && date[i]!='/'){
                atual += date[i];
            }else{               
                int temp =transformaInt(atual);
                atual="";
                data[j]=temp;
                j++;
            }
        }
        setAno(data[2]);
        setMes(data[1]);
        setDia(data[0]);
    }

    

    //metodo para transformar um int em uma string
    public  int transformaInt(String numero){
        int valor = 0;
        char n[] = numero.toCharArray();
        try{
            valor = Integer.parseInt(numero);
        }catch(Exception e){ }
        return valor;
    }

    //verifica se a data ja passou
    public boolean isFuture(){
        GregorianCalendar DATE = new GregorianCalendar();
        if(this.ano < DATE.get(Calendar.YEAR))
            return false;
        if(this.mes < DATE.get(Calendar.MONTH)+1 && this.ano <= DATE.get(Calendar.YEAR))
                return false;
        if(this.dia < DATE.get(Calendar.DATE) && this.mes <= DATE.get(Calendar.MONTH) && this.ano <= DATE.get(Calendar.YEAR))
                return false;
        return true;
    }

    public void dataBanco(String banco){
        String atual;
        atual = banco.substring(0, 4);
        setAno(transformaInt(atual));
        atual = banco.substring(5, 7);
        setMes(transformaInt(atual));
        atual = banco.substring(8, 10);
        setDia(transformaInt(atual));
    }
     //metodo para obter a data corrente do sistema
    public  String DataCorrenteBanco(){
		GregorianCalendar DATE = new GregorianCalendar();
		int dia = DATE.get(Calendar.DATE);
		int mes = DATE.get(Calendar.MONTH)+1;
		int ano = DATE.get(Calendar.YEAR);
                String data = String.format("%04d/%02d/%02d",ano,mes,dia);
                return data;
    }

}
